我們先前已經寫了取得文章的API,今天我們要開發新增文章的API。
回顧一下我們的API設計:
目前的posts-routes.js
const express = require('express');
const router = express.Router();
const postController = require('../controllers/posts-controller');
//@router POST /api/posts
//@desc 新增文章.
//@access Public
router.post("/", (req,res,next)=>{
res.json({message: 'It works!'});
});
//@router GET api/posts/:postId
//@desc 取得文章資訊(單一).
//@access Public
router.get("/:postId",postController.getPost);
//@router PUT /api/posts/:postId
//@desc 編輯文章
//@access Public
router.put("/:postId", (req,res,next)=>{
res.json({message: 'It works!'});
});
//@router DELETE api/posts
//@desc 刪除文章
//@access Public*/
router.delete("/:postId", (req,res,next)=>{
res.json({message: 'It works!'});
});
module.exports = router;
我們先接著開發新增文章
,在posts-controller.js
內新增createPost
//posts-controller.js
const MOCK_POSTS = [...]
const getPost = {...}
//建立文章
const createPost = (req,res,next)=>{
const { title , tags, content , authorId} = req.body;
const createdPlace = {
title,
tags,
content,
};
MOCK_POSTS.push(createdPlace);
res.status(201).json({place:createdPlace});
}
exports.getPost = getPost;
exports.createPost = createPost;
之後回到posts-route.js
在新增文章的route裡面使用createPost
const express = require("express");
const router = express.Router();
const postControllers = require("../../controllers/posts-controller");
//@router POST /api/posts
//@desc 新增文章
//@access Public
router.post("/", postControllers.createPost);
//@router GET api/posts/:postId
//@desc 取得文章資訊(單一)
//@access Public
router.get("/:postId",postControllers.getPost);
還記得我們在一開始就安裝了body-parser
,他是用來解析req.body的中介軟體(middleware)
body-parser
在以前的 Express 版本中,使用 body-parser 中介軟體是必需的,因為 Express 本身不含用於解析 HTTP 請求主體的功能。然而,自
Express 4.16.0
版本開始,它已經內置了用於解析請求主體的功能,而不再需要單獨安裝和使用 body-parser。const app = express(); // Express 4.16.0 版本後,無需使用 body-parser app.use(express.json()); // 解析 JSON 主體
//但因為我目前使用的還是舊版本,所以繼續使用body-parser。
//server.js
const express = require('express');
const app = express();
const port = 5000;
const postRoutes = require('./routes/posts-routes');
const bodyParser = require('body-parser');
app.use(bodyParser.json()); // 解析 JSON
app.use('/api/posts',postRoutes);
app.use((err, req, res, next) => {
//檢查是否已經向客戶端發送了HTTP header,如果已經發送了,表示已經無法再修改狀態碼和header
if (res.headersSent) {
return next(err);
}
//將錯誤的堆疊訊息(stack trace)輸出到控制台,方便進行除錯
console.error(err.stack);
res.status(err.status || 500);
res.json({
error: {
message: err.message || 'Internal Server Error'
}
});
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
});
此時我們無法透過瀏覽器去測試新增文章的api,因為當我們在瀏覽器輸入URL時他只會呼叫GET方法,
這時就需要用Postman
來協助我們測試Post。
Postman是一個流行的API開發工具,用於測試、驗證和設計RESTful API。它為開發人員提供了一個直觀的使用者界面,可以輕鬆地建立、發送和處理HTTP請求,以測試API端點的功能。
註冊好之後,進入到這個頁面,請看以下操作
我們當然也可以在上面測試get
API
目前為止都是使用假資料,之後就會進入真實資料庫MongoDB了
https://expressjs.com/en/resources/middleware/body-parser.html
https://www.postman.com/